package com.yyds.blackmagic.utils;


import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

/**
 * @Author ccc
 * @Date 2021/12/13
 * @Descripton
 */
public class JwtUtils {
    final static String secret="myJWT";//定义秘钥

    //1.创建令牌
    public static String createToken(String username){
        //30分钟后的时钟
        Date expire = new Date(System.currentTimeMillis() + 30 * 60 * 1000);
        //创建jwt构建器对象
        JWTCreator.Builder builder= JWT.create();
        //给构造器添加载荷信息（此处放置用户ID）
        builder.withAudience(username);
        //设置jwt的生存有效期（5分钟）
        builder.withExpiresAt(expire);
        //创建一个算法对象
        Algorithm algorithm= Algorithm.HMAC256(secret);
        //使用该算法加密头部及载荷信息，返回签名后的字符串（token）
        String sign=builder.sign(algorithm);
        return sign;
    }

    //2.从令牌中获取用户信息
    public static String getUserInfo(String token){
        String username = JWT.decode (token).getAudience ().get (0);
        return username;
    }

    //3.验证令牌的有效性
    public static boolean verifyToken(String token){
        try{
            Algorithm algorithm = Algorithm.HMAC256(secret);
            //根据加密时的算法获取jwt令牌的校验器
            JWTVerifier jwtVerifier = JWT.require(algorithm).build();
            //对令牌进行验证
            DecodedJWT verify = jwtVerifier.verify(token);
            return true;
        }catch (Exception e){

        }
        return false;
    }

}
